package mapper

import (
	"fmt"
	"github.com/beego/beego/v2/client/orm"
	"ksd-social-api/commons/page"
	"ksd-social-api/modules/resume/model"
	"ksd-social-api/modules/resume/model/context"
)

type AdminResumeTemplateMapper struct {
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  保存用户
 */
func (service *AdminResumeTemplateMapper) SaveUpdateResumeTemplate(resumeTemplate model.ResumeTemplate) *model.ResumeTemplate {
	db := orm.NewOrm()
	if resumeTemplate.Id > 0 {
		_, _ = db.Update(&resumeTemplate)
		return &resumeTemplate
	} else {
		_, _ = db.Insert(&resumeTemplate)
		return &resumeTemplate
	}
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户明细
 */
func (mapper *AdminResumeTemplateMapper) GetResumeByID(id uint64, systemId uint64) *model.Resume {
	// 创建orm对象
	mysql := orm.NewOrm()
	var resume model.Resume
	err := mysql.Raw("select * from xk_resume_template where id = ? and system_id = ?").SetArgs(id, systemId).QueryRow(&resume)
	if err != nil {
		return nil
	}
	return &resume
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户明细
 */
func (mapper *AdminResumeTemplateMapper) UpdateFieldById(id uint64, field string, value any, systemId uint64) bool {
	// 创建orm对象
	mysql := orm.NewOrm()
	_, err := mysql.Raw(fmt.Sprintf("update xk_resume_template set %s='%v',update_time=now() where id = ? and system_id = ?", field, value)).SetArgs(id, systemId).Exec()
	if err != nil {
		return false
	}
	return true
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc 查询小册分页
 */
func (mapper *AdminResumeTemplateMapper) FindResumeTemplateListAndPage(ctx context.ResumeSearchContext) (p *page.Page) {
	// 1：准备容器对象，开始装载数据库数据
	resumeList := []model.ResumeTemplate{}
	// 2：创建orm对象
	mysql := orm.NewOrm()
	cond := orm.NewCondition()
	// 3: 开始执行sql查询
	qs := mysql.QueryTable("xk_resume_template")
	// 4: 设定两个条件
	cond = cond.
		And("system_id", ctx.SystemId)
	// 5 : 判断分类是否传递如果不是""或者不是0就开始拼接条件
	// 如果用户输入的搜索关键词
	if len(ctx.Keyword) > 0 {
		cond1 := orm.NewCondition()
		cond1 = cond1.Or("title__icontains", ctx.Keyword)
		cond = cond.AndCond(cond1)
	}

	// 6：执行count查询
	total, err1 := qs.SetCond(cond).Count()
	if err1 != nil {
		return nil
	}
	// 4: 重新换算分页和规则
	page := p.Page(ctx.PageNo, ctx.PageSize, total)
	// 5: 执行sql---count(1)---获得具体数据  10 0/ 10 10 / 10  20/  10 30
	querySeter := qs.SetCond(cond)
	querySeter = querySeter.OrderBy("-create_time")
	_, err2 := querySeter.Limit(page.PageSize, page.CurrentPage).All(&resumeList,
		"id",
		"title",
		"description",
		"status",
		"resume_file",
		"price",
		"download_num",
		"create_time",
		"update_time",
		"is_deleted",
		"system_id",
		"system_name",
		"cover",
		"buy_num",
		"sorted",
		"rtype",
		"resume_review_file",
	)
	// 6：把查询的数据放入到分页的records字段，准备返回
	page.Records = resumeList
	// 7: 如果没有找到直接返回
	if err2 != nil {
		return nil
	}
	return page
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc 查询小册分页
 */
func (mapper *AdminResumeTemplateMapper) FindResumeTemplateCodePage(ctx context.CodeSearchContext) (p *page.Page) {
	// 1：准备容器对象，开始装载数据库数据
	resumeCodeList := []model.ResumeTemplateCode{}
	// 2：创建orm对象
	mysql := orm.NewOrm()
	cond := orm.NewCondition()
	// 3: 开始执行sql查询
	qs := mysql.QueryTable("xk_resume_template_code")
	// 4: 设定两个条件
	cond = cond.And("system_id", ctx.SystemId).And("is_deleted", 0)
	if ctx.Mark > -1 {
		cond = cond.And("mark", ctx.Mark)
	}
	if len(ctx.Keyword) > 0 {
		cond = cond.And("code", ctx.Keyword)
	}
	// 5 : 判断分类是否传递如果不是""或者不是0就开始拼接条件
	total, err1 := qs.SetCond(cond).Count()
	if err1 != nil {
		return nil
	}
	// 4: 重新换算分页和规则
	page := p.Page(ctx.PageNo, ctx.PageSize, total)
	// 5: 执行sql---count(1)---获得具体数据  10 0/ 10 10 / 10  20/  10 30
	querySeter := qs.SetCond(cond)
	querySeter = querySeter.OrderBy("mark")
	_, err2 := querySeter.Limit(page.PageSize, page.CurrentPage).All(&resumeCodeList,
		"id",
		"opid",
		"code",
		"mark",
		"system_id",
		"system_name",
		"create_time",
		"update_time",
	)
	// 6：把查询的数据放入到分页的records字段，准备返回
	page.Records = resumeCodeList
	// 7: 如果没有找到直接返回
	if err2 != nil {
		return nil
	}
	return page
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  保存和修改兑换码
 */
func (service *AdminResumeTemplateMapper) SaveUpdateResumeTemplateCode(code model.ResumeTemplateCode) (dbresume *model.ResumeTemplateCode) {
	db := orm.NewOrm()
	if code.Id > 0 {
		_, _ = db.Update(&code)
		return &code
	} else {
		_, _ = db.Insert(&code)
		return &code
	}
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  更新
 */
func (mapper *AdminResumeTemplateMapper) UpdateFieldByCodeId(id uint64, field string, value any, systemId uint64) bool {
	// 创建orm对象
	mysql := orm.NewOrm()
	_, err := mysql.Raw(fmt.Sprintf("update xk_resume_template_code set %s='%v',update_time=now() where id = ? and system_id = ?", field, value)).SetArgs(id, systemId).Exec()
	if err != nil {
		return false
	}
	return true
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据id删除
 */
func (mapper *AdminResumeTemplateMapper) DelById(id uint64, systemId uint64) bool {
	// 创建orm对象
	mysql := orm.NewOrm()
	_, err := mysql.Raw("delete from xk_resume_template  where id = ? and system_id = ?").SetArgs(id, systemId).Exec()
	if err != nil {
		return false
	}
	return true
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据id删除
 */
func (mapper *AdminResumeTemplateMapper) DelCodeById(id uint64, systemId uint64) bool {
	// 创建orm对象
	mysql := orm.NewOrm()
	_, err := mysql.Raw("delete from xk_resume_template_code  where id = ? and system_id = ?").SetArgs(id, systemId).Exec()
	if err != nil {
		return false
	}
	return true
}

/**
 * @author feige
 * @date 2023-10-08
 * @desc 根据id查询小册信息
 */
func (mapper *AdminResumeTemplateMapper) GetById(id uint64, systemId uint64) *model.ResumeTemplate {
	// 1: 创建一个数据连接
	db := orm.NewOrm()
	// 2: 赋予id给结构体
	data := model.ResumeTemplate{Id: id, SystemId: systemId}
	// 3: 读取id的数据放入到结构体，进行返回
	_ = db.Read(&data, "id", "system_id")
	// 4: 结构返回
	return &data
}
